package
{
        import alternativa.engine3d.core.Mesh;
        import alternativa.engine3d.core.Object3D;
        import alternativa.engine3d.materials.FillMaterial;
        import alternativa.engine3d.materials.WireMaterial;
        import alternativa.engine3d.controllers.ObjectController;
        import flash.events.Event;
        import flash.utils.Timer;
        import flash.utils.clearInterval;
        import flash.utils.setInterval;
		

        public class Ascenseur extends Mesh
        {
                private var hauteur:int;
                private var largeur:int;
                private var longueur:int;
                
                private var hAscenseur:int;
                private var lAscenseur:int;
                
                private var hPorte:int;
                private var lPorte:int;

                private var couloir:int;
				private var numero:int;
                
                private var porteAscenseurG:Object3D;
                private var porteAscenseurD:Object3D;
				private var panneauAscenseur:Object3D;
                private var destination:int;
				private var timer:Timer;
				
				private var controller:ObjectController;
				private var estOuvert:Boolean;
				private var bouge:Boolean;
				
				private var intervalID:uint;
                
                public function Ascenseur(numero:int)
                {
                        super("Ascenseur"+numero);
                        hauteur=300;
                        largeur=200;
                        longueur=200;
						this.numero=numero;
                        
                        var x:int=longueur;
                        var y:int=largeur;
                        //******Points******
                        createVertex(0,0,0,1);
                        createVertex(0,0,hauteur,2);
                        createVertex(longueur,0,0,3);
                        createVertex(longueur,0,hauteur,4);
                        
                        createVertex(longueur,largeur,0,5);
                        createVertex(longueur,largeur,hauteur,6);
         
                        createVertex(0,largeur,0,7);
                        createVertex(0,largeur,hauteur,8);
						
						createVertex(0,0,hauteur-100,9);
                        createVertex(0,largeur,hauteur-100,10);
                        
                        //***********Faces***********
                        createFace([1,2,4,3],"Ff1"); //front
                        
                        createFace([2,8,6,4],"Fc"); //ceiling
                        createFace([3,5,7,1],"Fg"); //ground
                        
                        createFace([7,5,6,8],"Fb1"); //back
                        
                        createFace([3,4,6,5],"Fr1");//right
						
						createFace([9,10,8,2],"Fl1");//left
      
                        //*******Surfaces*******
                        createSurface(["Ff1","Fb1","Fr1","Fl1"],"murs");
                        createSurface(["Fc"],"plafond");
                        createSurface(["Fg"],"sol");
                        
                        
                        //******Texturage********
                        //setWireMaterials();
                        setFillMaterials();
						
						porteAscenseurG=new PorteInterieurAscenseur(true);
						porteAscenseurG.x-=2.5;
						porteAscenseurG.y+=100;
						porteAscenseurD=new PorteInterieurAscenseur(false);
						porteAscenseurD.x-=2.5;
						porteAscenseurD.y+=0;
						addChild(porteAscenseurG);
						addChild(porteAscenseurD);
						
						panneauAscenseur=new PanneauAscenseur(numero);
						panneauAscenseur.x=50;
						panneauAscenseur.y=0.1;
						panneauAscenseur.z=50;
						addChild(panneauAscenseur);
						
						timer= new Timer(0);
						timer.addEventListener("timer", activerAscenseur);
                }
                
                private function setWireMaterials():void {
                        cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFF0000));
                }
                
                private function setFillMaterials():void {
                        setMaterialToSurface(new FillMaterial(0xCCCCCC,1,"normal",0.1,0x000000),"plafond");
                        setMaterialToSurface(new FillMaterial(0x7FC6BC,1,"normal",0.1,0x000000),"sol");
                        setMaterialToSurface(new FillMaterial(0xBD8D46,1,"normal",0.1,0x000000),"murs");
                }
				
				public function caBouge():Boolean{
					return bouge;
				}
				
				public function activerAscenseur(e:Event):void {
					clearInterval(intervalID);
					if(z==(destination*300)){
						bouge=false;
						(BoutonAppel)(this.scene.root.getChildByName("Etage"+destination).getChildByName("Bouton"+destination)).eteintBouton();
						(panneauAscenseur as PanneauAscenseur).eteint(destination);
						(PorteInterieurAscenseur)(porteAscenseurG).timerStart();
						(PorteInterieurAscenseur)(porteAscenseurD).timerStart();
						(PorteExterieurAscenseur)((this.scene.root.getChildByName("Etage"+destination).getChildByName("Exterieur"+numero+"Gauche"))).timerStart();
						(PorteExterieurAscenseur)((this.scene.root.getChildByName("Etage"+destination).getChildByName("Exterieur"+numero+"Droite"))).timerStart();
						timer.stop();	
						fermetureAutomatique();
					}
					else{
						if(z<(destination*300)){
							this.z+=2;
						}else{
							this.z-=2;
						}
					}	
				}
				
				public function appelAscenseur(etage:int):void{
					this.destination=etage;
					bouge=true;
					timer.start();
				}
				
				public function fermetureAutomatique():void{
					intervalID=setInterval(fermeturePortes,10000);
				}
				public function fermeturePortes():void{
					var a:PorteInterieurAscenseur=(PorteInterieurAscenseur)(porteAscenseurG);
					var b:PorteInterieurAscenseur=(PorteInterieurAscenseur)(porteAscenseurD);
					var c:PorteExterieurAscenseur=(PorteExterieurAscenseur)((this.scene.root.getChildByName("Etage"+destination).getChildByName("Exterieur"+numero+"Gauche")));
					var d:PorteExterieurAscenseur=(PorteExterieurAscenseur)((this.scene.root.getChildByName("Etage"+destination).getChildByName("Exterieur"+numero+"Droite")));
					if(a.estOuvert()) a.timerStart();
					if(b.estOuvert()) b.timerStart();
					if(c.estOuvert()) c.timerStart();
					if(d.estOuvert()) d.timerStart();
					clearInterval(intervalID);
				}
        }
}
